10. 可变性 Mutability

对象(Object) 是一个值,其行为应与其表示的事物类似。对象通过其 属性(Attributes) 来实现其行为。对象的属性既可以是一个值,也可以是一个函数,后者被称为 方法(Methods)

类(Class) 代表了一类对象。

点表达式负责访问对象的属性,其形如:

<值为对象的表达式>.<对象属性>

对象与类是 面向对象编程(Object-oriented Programming,OOP) 的核心。在 Python 与 Java 中,一切皆对象

在程序运行过程中,一些对象在运行时其值可能会发生变化,这被称作 可变(Mutable) 对象,列表与字典是可变对象。对应的,有 不可变(Immutable) 对象。数字字面量、字符串与元组(Tuple) 是不可变对象。

但请注意:如果一个不可变序列内部包含一个可变对象(例如元组内嵌套了一个列表)作为其元素,则可以更改此可变对象元素从而更改整个序列的值。

函数可以改变其作用域内任何可变对象的值。

考虑以下两个概念:相同(Sameness)相等(Equality)。相同指的是两个名字被绑定到 同一个对象。因此当我们通过其中一个名字更改其绑定的对象的值时,通过另一个名字访问该对象,得到的是改变后的值。相等则指的是 两个内容相同的对象。对其中一个作修改不会影响另外一个对象。

is 运算符用于判断两个名称绑定的对象是否 相同。而 “==” 运算符用于判断两个名称绑定的对象是否 相等,即对该对象求值后的结果是否等同。显然,相同是相等的 充分不必要条件

函数定义时的默认参数是该函数值的一部分,而非每次调用该函数时重新生成的新对象。因此,若将可变参数设置为函数参数的默认值。则在不加以干预的情况下每次对该值的修改都将保留,并不会随着某次函数生命周期结束而被还原为初始值。

然而,这一特性也可加以利用以定义 可变函数(Mutable Function)